/*
 * Timer.h
 *
 *  Created on: 2010-8-11
 *      Author: stargui
 */

#ifndef TIMER_H_
#define TIMER_H_

#include <list>

namespace Common
{

typedef struct
{
	bool (*handle)(void *, void *);
	void *lParam, *wParam;
	int interval;
	int timeout;
} STimerHandle;

class CTimer
{
public:

	CTimer();

	virtual ~CTimer();

private:

	bool ProcessHandle(STimerHandle &handle);

public:
	/**
	 * @brief 向定时队列中注册超时函数。
	 * @param (*handle)(void*)  需要注册到定时队列中运行的函数，超时将会调用一次。 \n
	 如果该函数返回true, 将会重置超时时间, 并重新加入队列。 \n
	 否则将该函数从队列中删除。
	 * @param timeout 	超时时间长短。单位为ms。
	 * @param lParam 		需要传入超时函数的参数。
	 * @param wParam 		需要传入超时函数的参数。
	 * @return 	成功true, 失败false。
	 */
	bool Add(bool(*handle)(void *, void *), int timeout, void *lParam, void *wParam = NULL);

	/**
	 * @brief 移出的定时队列中的函数。
	 * @param (*handle)(void*) 需要移出的定时队列中的函数
	 * @param lParam 需要移出的定时队列中的函数的参数。
	 * @param wParam 需要移出的定时队列中的函数的参数。
	 * @return 成功true, 失败false。
	 */
	bool Remove(bool(*handle)(void *, void *), void *lparam, void *wParam = NULL);

	/**
	 * @brief 移出的定时队列中的函数。
	 * @param (*handle)(void*) 需要移出的定时队列中的函数
	 * @return 成功true, 失败false。
	 */
	bool Remove(bool(*handle)(void *, void *));

	bool Run(void);

private:

	int m_interval;

	std::list<STimerHandle> m_handleList;
};

}

#endif /* TIMER_H_ */
